package com.seari.gena.ciosServer.handler;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.seari.gena.bean.ServerBean;
import com.seari.gena.ciosServer.CIOSNotifyClient;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

public class CIOSServerHandler extends ChannelInboundHandlerAdapter {
	protected static Logger logger = LoggerFactory.getLogger(CIOSServerHandler.class);

	/**
	 * 当客户端主动链接服务端的链接后，这个通道就是活跃的了。也就是客户端与服务端建立了通信通道并且可以传输数据
	 */
	public void channelActive(ChannelHandlerContext ctx) throws Exception {
		logger.info(ctx.channel().localAddress().toString() + " 通道已激活！");
	}

	/**
	 * 当客户端主动断开服务端的链接后，这个通道就是不活跃的。也就是说客户端与服务端的关闭了通信通道并且不可以传输数据
	 */
	public void channelInactive(ChannelHandlerContext ctx) throws Exception {
		logger.info(ctx.channel().localAddress().toString() + " 通道不活跃！");
	}

	/**
	 * 功能: 此处用来处理收到的数据中含有中文的时 出现乱码的问题
	 */
	private String getMessage(ByteBuf buf) {
		byte[] con = new byte[buf.readableBytes()];
		buf.readBytes(con);
		try {
			return new String(con, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 功能：读取服务器发送过来的信息
	 */
	@Override
	public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
		// 第一种：接收字符串时的处理
		ByteBuf buf = (ByteBuf) msg;
		String rev = getMessage(buf);
		logger.info("服务端收到服务器数据:" + rev);
		String[] revArr = rev.split("\r\n");
		logger.info(Arrays.toString(revArr));
		ServerBean bean = new ServerBean();
		bean.setSubscribe(revArr[0].substring(revArr[0].indexOf("/")+1, revArr[0].lastIndexOf("?attr=")));
		//bean.setCallback("127.0.0.1:2000");
		if (rev.toUpperCase().indexOf("SID:") != -1) {
			bean.setSid(revArr[4]);
			ctx.writeAndFlush("HTTP/1.1 200 OK\r\n" + "Content-Length: 0\r\n\r\n");
			logger.info("renewal");
		} else {
			logger.info("firstSubscribe");
			bean.setCallback(revArr[1].substring(revArr[1].indexOf("//") + 2));
			bean.setSid("Sid: " + System.currentTimeMillis());
			ctx.writeAndFlush("HTTP/1.1 200 OK\r\n" + "Content-Length: 0\r\n" + bean.getSid() + "\r\n\r\n");
			CIOSNotifyClient client = new CIOSNotifyClient(bean.getCallback().split(":")[0], Integer.parseInt(bean.getCallback().split(":")[1]), bean);
			client.setup();

		
		}		

	}

	/**
	 * 功能：读取完毕客户端发送过来的数据之后的操作
	 */
	@Override
	public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
		logger.info("服务端接收数据完毕");
	}

}